// 头部数据格式化尺度标准
const formatUnit = {
  a100000000: 1000000000, // 10亿以上，单位为亿
  a10000: 100000 // 10万以上，单位为万
}

/**
 *格式化时间
 *yyyy-MM-dd hh:mm:ss
 */
export function formatDate(time, fmt) {
  if (time === undefined || '') {
    return
  }
  const date = new Date(time)
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  const o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  }
  for (const k in o) {
    if (new RegExp(`(${k})`).test(fmt)) {
      const str = o[k] + ''
      fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : padLeftZero(str))
    }
  }
  return fmt
}

function padLeftZero(str) {
  return ('00' + str).substr(str.length)
}
/*
 * 隐藏用户手机号中间四位
 */
export function hidePhone(phone) {
  return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
}

/**
 *
 * @param {*} str 要转换的数字或者字符串数字
 * @param {*} decimal 要保留几位小数 1-20
 * @param {*} digits 要按照多少位分割数字
 * @param {*} link 分割符, 默认逗号
 * @returns 如传入 formatMoney(123456789.123, 2, 3, '-')  返回  123-456-789.12
 */
export function formatMoney(str, decimal = 1, digits = 3, link = ',') {
  decimal = decimal > 0 && decimal <= 20 ? decimal : 2
  str = parseFloat((str + '').replace(/[^\d\.-]/g, '')).toFixed(decimal) + ''
  const l = str
    .split('.')[0]
    .split('')
    .reverse()
  const r = str.split('.')[1]
  let t = ''
  for (let i = 0; i < l.length; i++) {
    t += l[i] + ((i + 1) % digits === 0 && i + 1 !== l.length ? link : '')
  }
  return (
    t
      .split('')
      .reverse()
      .join('') +
    '.' +
    r
  )
}

/**
 * 将数值四舍五入后格式化.
 *
 * @param num 数值(Number或者String)
 * @param cent 要保留的小数位(Number)
 * @param isThousand 是否需要千分位 0:不需要,1:需要(数值类型);
 * @return 格式的字符串,如'1,234,567.45'
 * @type String
 */
function formatNumber(num, cent, isThousand) {
  num = num.toString().replace(/\$|\,/g, '') // 检查传入数值为数值类型
  if (isNaN(num)) num = '0' // 获取符号(正/负数)
  // eslint-disable-next-line
  const sign = num == (num = Math.abs(num))
  num = Math.floor(num * Math.pow(10, cent) + 0.50000000001) // 把指定的小数位先转换成整数.多余的小数位四舍五入
  let cents = num % Math.pow(10, cent) // 求出小数位数值
  num = Math.floor(num / Math.pow(10, cent)).toString() // 求出整数位数值
  cents = cents.toString() // 把小数位转换成字符串,以便求小数位长度 // 补足小数位到指定的位数
  while (cents.length < cent) cents = '0' + cents
  if (isThousand) {
    // 对整数部分进行千分位格式化.
    for (let i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) {
      num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3))
    }
  }
  if (cent > 0) return (sign ? '' : '-') + num + '.' + cents
  else return (sign ? '' : '-') + num
}

function strNumSize(tempNum) {
  const stringNum = tempNum.toString()
  const index = stringNum.indexOf('.')
  let newNum = stringNum
  if (index !== -1) {
    newNum = stringNum.substring(0, index)
  }
  return newNum.length
}
/**
 *
 * @param {*} num 要处理的金额数字
 * @returns
 */
export function unitConvert(num) {
  const moneyUnits = ['元', '万元', '亿元', '万亿']
  const dividend = 10000
  let curentNum = num
  // 转换数字
  let curentUnit = moneyUnits[0]
  // 转换单位
  for (let i = 0; i < 4; i++) {
    curentUnit = moneyUnits[i]
    if (strNumSize(curentNum) < 5) {
      break
    }
    curentNum = curentNum / dividend
  }
  // let m = { num: 0, unit: "" }
  // m.num = curentNum.toFixed(2)
  // m.unit = curentUnit;
  return curentNum.toFixed(2) + curentUnit
}
/**
 *
 * @param {*} num 固定亿转换
 * @returns
 */
export function unitConvertbillon(num, curentUnit = '亿', decimal = 1) {
  const dividend = 100000000
  let curentNum = num
  // let curentUnit = "亿元"
  // if (strNumSize(curentNum) < 5) {

  // }
  curentNum = curentNum / dividend
  return curentNum.toFixed(decimal) + curentUnit
}

// 判断是否是整数
// function isInteger(obj) {
//   return Math.floor(obj) === obj
// }

/**
 * @param {*} num 要处理的百分比金额
 * @returns
 */

export function percent(num, fixed = 1) {
  // 保留一位小数
  if (Number(num) === 0) {
    return '0.0' + '%'
  }
  return (num * 100).toFixed(fixed) + '%'
}

/**
 * @param {*} num 要处理的pt格式化
 * @returns
 */

export function ptFormat(num, fixed = 1) {
  // 保留一位小数
  if (Number(num) === 0) {
    return '0.0' + 'pt'
  }
  return (num * 100).toFixed(1) + 'pt'
}
/**
 * @param {*} num 要处理的pt格式化
 * @returns
 */

/**
 *
 * @param {*} num 处理detail详情页面
 * @returns
 */

export function detailUnitNumber(num) {
  const moneyUnits = ['元', '万元', '亿元', '万亿']
  const dividend = 10000
  let curentNum = num
  // 转换数字
  let curentUnit = moneyUnits[0]
  // 转换单位
  for (let i = 0; i < 4; i++) {
    curentUnit = moneyUnits[i]
    if (strNumSize(curentNum) < 5) {
      break
    }
    curentNum = curentNum / dividend
  }
  return { num: curentNum.toFixed(1), unit: curentUnit }
}

/**
 * 数据格式化函数
 * @param {number} data
 * @param {string} type
 * @returns
 */
export function dataFormat(data, type, cent = 1) {
  if (data === '' || data === null || data === 'null') {
    return '-'
  }
  if (type === 'percent') {
    return percent(data, cent)
  } else if (type === 'pt') {
    return ptFormat(data, cent)
  } else if (type === 'number') {
    if (data > formatUnit.a100000000) {
      return formatNumber(Number(data) / 100000000, cent, 1)
    } else if (data > formatUnit.a10000) {
      return formatNumber(Number(data) / 10000, cent, 1)
    } else {
      return formatNumber(Number(data), cent, 1)
    }
  } else if (type === 'person') {
    return Math.round(data).toLocaleString()
  } else {
    return data
  }
}
/**
 * 数据格式化（使用单位尺度）
 * @param {*} data
 * @param {*} type
 * @returns
 */
export function dataFormatWidthUnitLevel(data, type, unitlevel, cent = 1) {
  // console.log('dataFormatWidthUnitLevel', data)
  if (data === '' || data === null) {
    return '-'
  } else {
    if (type === 'percent') {
      return percent(data, cent)
    } else if (type === 'pt') {
      return ptFormat(data, cent)
    } else if (type === 'number') {
      if (unitlevel === 100000000) {
        return formatNumber(Number(data) / 100000000, cent, 1)
      } else if (unitlevel === 10000) {
        return formatNumber(Number(data) / 10000, cent, 1)
      } else {
        return formatNumber(Number(data), cent, 1)
      }
    } else if (type === 'person') {
      return Math.round(data).toLocaleString()
    } else {
      return data
    }
  }
}

export function unitFormat(data, type) {
  if (type === 'number') {
    if (data > formatUnit.a100000000) {
      return '(亿元)'
    } else if (data > formatUnit.a10000) {
      return '(万元)'
    } else {
      return '(元)'
    }
  } else if (type === 'person') {
    return '(人)'
  } else {
    return ''
  }
}

export function unitBrackets(data, type) {
  if (type === 'number') {
    if (data > formatUnit.a100000000) {
      return '亿元'
    } else if (data > formatUnit.a10000) {
      return '万元'
    } else {
      return '元'
    }
  } else if (type === 'person') {
    return '人'
  } else {
    return ''
  }
}

export function getUnitLv(data, type) {
  if (data > formatUnit.a100000000) {
    return 100000000
  } else if (type === 'number') {
    if (data > formatUnit.a10000) {
      return 10000
    } else {
      return 0
    }
  } else if (type === 'person') {
    return 0
  } else {
    return 0
  }
}

export function getUnitFromLevel(unit, type) {
  if (type === 'number') {
    if (unit === 100000000) {
      return '(亿元)'
    } else if (unit === 10000) {
      return '(万元)'
    } else {
      return '(元)'
    }
  } else if (type === 'person') {
    return '(人)'
  } else {
    return ''
  }
}

export function unique(arr, attrName) {
  const res = new Map()
  return arr.filter((a) => !res.has(a[attrName]) && res.set(a[attrName], 1))
}
